home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xtartan-2.0 / color.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-24  |  2.1 KB  |  96 lines

  1. /* color.c - functions dealing with colors
  2.  * by Jim McBeath (jimmc@hisoft.uucp)
  3.  *
  4.  *  7.Jan.88  jimmc  Initial definition (X10)
  5.  * 24.Oct.89  jimmc  Convert to X11, Xt; general restructuring
  6.  *  9.Jan.91  jimmc  v2.0: Use resources to do color translations
  7.  */
  8.  
  9. #include <X11/Intrinsic.h>
  10.  
  11. typedef struct _cinfo {        /* info about one color */
  12.     struct _cinfo *next;
  13.     char *name;
  14.     char *longname;
  15.     int pixel;
  16. } Cinfo;
  17.  
  18. extern char *GetSubResource();
  19.  
  20. extern Display *TDisplay;
  21. extern Widget TTopWidget;
  22. extern Colormap TColormap;
  23.  
  24. Cinfo *colorinfo;
  25.  
  26. int            /* returns the pixel value */
  27. colorPixel(color)
  28. char *color;        /* the color code */
  29. {
  30.     Cinfo *p;
  31.     char *tcolor;
  32.     int t,pixel;
  33.     XColor xdef, sdef;
  34.  
  35.     /* see if we have already translated this color */
  36.     for (p=colorinfo; p; p=p->next) {
  37.         if (strcmp(p->name,color)==0)
  38.             return p->pixel;
  39.     }
  40.     /* we have not seen it before, make the translation */
  41.     pixel = 0;    /* we use 0 on any errors */
  42.     tcolor = GetSubResource(TTopWidget,"colorCode",color);
  43.     if (!tcolor) {
  44.         Warn("No color translation for code %s",color);
  45.         tcolor = "<No translation>";
  46.     } else {
  47.         t = XLookupColor(TDisplay,TColormap,tcolor,&xdef,&sdef);
  48.         if (t==0) {
  49.             Warn("Error getting definition for color %s, code %s",
  50.                 tcolor, color);
  51.         } else {
  52.             t = XAllocColor(TDisplay,TColormap,&xdef);
  53.             if (t==0) {
  54.                 Warn("Can't allocate color %s, code %s",
  55.                     tcolor, color);
  56.             } else {
  57.                 pixel = xdef.pixel;
  58.             }
  59.         }
  60.     }
  61.     p = (Cinfo *)XtMalloc(sizeof(Cinfo));
  62.     p->name = XtMalloc(strlen(color)+1);
  63.     (void)strcpy(p->name,color);
  64.     p->longname = XtMalloc(strlen(tcolor)+1);
  65.     (void)strcpy(p->longname,tcolor);
  66.     p->pixel = pixel;
  67.     p->next = colorinfo;
  68.     colorinfo = p;
  69.     return p->pixel;
  70. }
  71.  
  72. char *
  73. colorLongname(color)
  74. char *color;        /* the color code */
  75. {
  76.     Cinfo *p;
  77.  
  78.     (void)colorPixel(color);    /* load it if not already loaded */
  79.     for (p=colorinfo; p; p=p->next) {
  80.         if (strcmp(p->name,color)==0)
  81.             return p->longname;
  82.     }
  83.     return "<no translation>";    /* should never happen */
  84. }
  85.  
  86. dumpColors()
  87. {
  88.     Cinfo *p;
  89.  
  90.     for (p=colorinfo; p; p=p->next) {
  91.         (void)printf("%s: %s\n", p->name, p->longname);
  92.     }
  93. }
  94.  
  95. /* end */
  96.